<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
	</head>
	<body></body>
	<script>
		// function Person() {}

		// console.log(Person.prototype)

		// const per = new Person()
		// console.log(per.toString())
		// console.log(per.__proto__ === Person.prototype)

		// // 原型继承
		// function Person() {
		// 	this.list = [1, 2, 3]
		// }
		// Person.prototype.say = function () {
		// 	console.log('say 方法被调用了')
		// }

		// function Student() {}
		// Student.prototype = new Person()
		// Student.prototype.constructor = Student
		// const stu = new Student()
		// stu.say() // 输出 say
		// stu.aa = '2'
		// console.log(stu.list)
		// console.dir(stu)

		//  构造函数继承
		// function Person() {
		// 	this.list = [1, 2, 3]
		// }
		// Person.prototype.say = function () {
		// 	console.log('say 方法被调用了')
		// }

		// function Student(name) {
		// 	Person.call(this, name)
		// }
		// const stu = new Student()
		// // stu.say() // 输出 say
		// console.log(stu.list)
		// console.dir(stu)

		// //  组合继承
		// function Person() {
		// 	this.list = [1, 2, 3]
		// }
		// Person.prototype.say = function () {
		// 	console.log('say 方法被调用了')
		// }

		// function Student(name) {
		// 	Person.call(this, name)
		// }
		// Student.prototype = new Person()
		// Student.prototype.constructor = Student
		// const stu = new Student()
		// stu.say() // 输出 say
		// console.log(stu.list)
		// console.dir(stu)

		// // 寄生组合是继承
		// function inherit(Person, Student) {
		// 	let prototype = Object.create(Person.prototype)
		// 	prototype.constructor = Student
		// 	Student.prototype = prototype
		// }
		// function Person() {
		// 	this.list = [1, 2, 3]
		// }
		// Person.prototype.say = function () {
		// 	console.log('say 方法被调用了')
		// }

		// function Student(name) {
		// 	Person.call(this, name)
		// }
		// inherit(Person, Student)
		// const stu = new Student('lisi')
		// stu.say() // 输出 say
		// console.log(stu.list)
		// console.dir(stu)

		class Person {
			constructor(name) {
				this.name = name
				this.list = [1, 2, 3]
			}
			say() {
				console.log('say')
			}
		}

		class Student extends Person {
			constructor(name) {
				super(name)
			}
		}
		const stu = new Student('lisi')
		stu.say() // 输出 say
		console.log(stu.list)
		console.dir(stu)
	</script>
</html>
